package com.zmn.plat.services.interfaces.product;

import java.util.List;

import com.zmn.plat.model.entity.product.ServProductRelation;
import com.zmn.plat.model.entity.product.ServProductRelationQuery;
import com.zmn.plat.model.vo.product.relation.ServProductRelationVO;

/**
 * @author tanbiao
 * @description
 * @since 2019/9/20 11:20
 * @modifier
 **/
public interface ServProductRelationService {

    /**
     * 根据后台产品id查询
     * 
     * @param productId
     * @return
     */
    ServProductRelation findByProductId(Integer productId);

    /**
     * 分页查询
     * 
     * @param query
     * @return
     */
    List<ServProductRelation> listPageByQuery(ServProductRelationQuery query);

    /**
     * 查询列表
     *
     * @param query
     * @return
     */
    List<ServProductRelationVO> listByQueryForShow(ServProductRelationQuery query);

    /**
     * 查询列表
     *
     * @param query
     * @return
     */
    List<ServProductRelation> listByQuery(ServProductRelationQuery query);

    /**
     * 根据选择的后台产品查询后台产品关联的所有前台产品的关联关系
     *
     * @param
     * @return
     */
    List<ServProductRelationVO> listByProductIds(List<Integer> productIds);

    /**
     * 根据后台产品id查询对应的前台产品（后台产品必须为启用状态）
     *
     * @param
     * @return
     */
    List<ServProductRelationVO> listShowProductByProductIds(List<Integer> productIds);

    /**
     * 描述: 查询所有前台产品能与后台产品关联的产品id
     *
     * @param status status
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/25 10:53
     */
    List<Integer> listProductIdByServProductStatus(Integer status);

    /**
     * 描述: 查询所有前台产品能与后台产品关联的产品id
     *
     * @param bizType bizType
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/25 10:53
     */
    List<Integer> listProductIdByServProductBizType(Integer bizType);

    /**
     * 描述: 查询渠道开通的通用产品id和状态开启的渠道产品 id集合
     *  查询产品id集合
     *  查询的产品必须是前后太产品关联的产品 并且产品类型为：
     *      1、通用产品 则再相应查询的渠道中没用禁用通用产品(渠道开通的相应服务分类中开启了通用产品)
     *      2、渠道产品 判断产品的渠道id是查询的渠道id(channelId)
     *
     * @param channelId 渠道
     * @param status 产品状态(启用/禁用)
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/25 14:08
     */
    List<Integer> listProductIdByChannelIdAndStatus(Integer channelId, Integer status);

    /**
     * 统计数量
     *
     * @param query
     * @return
     */
    Integer countByQuery(ServProductRelationQuery query);

    /**
     * 通过主键更新
     *
     * @param company
     * @return
     */
    Integer updateByKey(ServProductRelation company);

    /**
     * 修改状态
     *
     * @param arrayIds
     * @param status
     * @param mcStaffName
     * @return 是否成功1/0
     */
    Integer updateStatusBatch(List<Integer> arrayIds, int status, String mcStaffName);

    /**
     * 修改关联关系
     *
     * @param relation
     * @param exitsProductIds
     * @return 是否成功1/0
     */
    Integer updateBatch(ServProductRelation relation, List<Integer> exitsProductIds);

    /**
     * 添加关系
     *
     * @param company
     * @return
     */
    Integer insert(ServProductRelation company);

    /**
     * 批量添加关系
     *
     * @param insertRelations
     * @return
     */
    Integer insertBatch(List<ServProductRelation> insertRelations);

    /**
     * 批量删除关系
     *
     * @param ids
     * @return
     */
    Integer deleteBatch(List<Integer> ids);

}
